[アップデート] Amazon DocumentDB のインスタンスベースクラスターが AWS Secrets Manager を使ったパスワード管理の統合をサポートしました
こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。
What's New にはまだ出てきていないのですが、インスタンスベースの Amazon DocumentDB クラスターが AWS Secrets Manager と統合し、クラスターの認証情報の管理を Secrets Manager にオフロードできるようになりました。
Support AWS Secret Manager managed password for AWS DocumentDB instance-based cluster.
ドキュメントも登場してきていますね。
どんなアップデート?
アップデート前までは DocumentDB のユーザー管理はユーザー側で管理する必要がありました。定期的に AWS Lambda を使ってパスワードの更新し、認証情報の管理を Secrets Manager や Parameter Store に保管していたのではないでしょうか。
今回のアップデートで、ユーザーの認証情報の管理を Secrets Manager にオフロードできるようになりました。
たとえば、パスワードのローテーションはデフォルトで 7 日間で自動でローテーションされるようです。
Amazon DocumentDB manages the settings for the secret and rotates the secret every seven days by default. You can modify some of the settings, such as the rotation schedule. If you delete a cluster that manages a secret in Secrets Manager, the secret and its associated metadata are also deleted.
アプリケーションから見れば、 Secrets Manager の情報を見に行けばいいため、ほとんど意識せず DocumentDB のパスワードがローテーションできそうですね。
ちょうど 2 年前に Amazon RDS でアップデートがあったものの、 DocumentDB バージョンが来たイメージを持っていただけると良いのではないでしょうか。
制約事項
本機能には制約事項があります。詳しくはドキュメントをご覧ください。
- Elastic クラスターではないこと
- Amazon DocumentDB global database に所属するクラスターではないこと
- Amazon DocumentDB のクロスリージョンリードレプリカを使っていないこと
やってみる
それではやってみましょう。今回はマネジメントコンソールから確認します。
クラスター作成
クラスター作成時に Managed in AWS Secrets Manager
が増えていますね。
クラスターを作成すると Secrets Manager に新しいシークレットが作成されていました。
Secrets Manager
RDS と記載されていますが DocumentDB の物になります。
ドキュメントに記載の通り、ローテーションはデフォルトで 7 日に設定されていますね。
ローテーションの編集画面です。スケジュール式を選ぶと cron 等で表現できるようです。便利ですね。
また、お客様は Lambda ローテーション関数を選択する必要はありません。
は嬉しいポイントですね。
シークレットの値を取得すると、指定したユーザー名と自動生成されたパスワードが格納されていました。
接続確認
接続してみます。 VPC に所属する CloudShell から接続してみます。
secrets=$(aws secretsmanager get-secret-value --secret-id rds\!cluster-ed733fdb-bac5-4e0f-a978-XXXXXXXXXX | jq .SecretString | jq fromjson | jq -r)
user=$(echo $secrets | jq -r .username)
password=$(echo $secrets | jq -r .password)
wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
mongosh --tls --host secretsmanager-integration.cluster-XXXXXXXXXXXX.ap-northeast-1.docdb.amazonaws.com:27017 --sslCAFile global-bundle.pem --username $user --password $password
うまく接続できているようです。
[cloudshell-user@ip-10-0-138-252 ~]$ secrets=$(aws secretsmanager get-secret-value --secret-id rds\!cluster-ed733fdb-bac5-4e0f-a978-XXXXXXXXXX | jq .SecretString | jq fromjson | jq -r)
[cloudshell-user@ip-10-0-138-252 ~]$ user=$(echo $secrets | jq -r .username)
[cloudshell-user@ip-10-0-138-252 ~]$ password=$(echo $secrets | jq -r .password)
[cloudshell-user@ip-10-0-138-252 ~]$
[cloudshell-user@ip-10-0-138-252 ~]$ wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
--2024-12-22 07:27:36-- https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
Resolving truststore.pki.rds.amazonaws.com (truststore.pki.rds.amazonaws.com)... 18.172.185.20, 18.172.185.113, 18.172.185.71, ...
Connecting to truststore.pki.rds.amazonaws.com (truststore.pki.rds.amazonaws.com)|18.172.185.20|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 147008 (144K) [application/octet-stream]
Saving to: ‘global-bundle.pem’
global-bundle.pem 100%[=====================================================================================================================================================>] 143.56K 573KB/s in 0.3s
2024-12-22 07:27:37 (573 KB/s) - ‘global-bundle.pem’ saved [147008/147008]
[cloudshell-user@ip-10-0-138-252 ~]$ mongosh --tls --host secretsmanager-integration.cluster-XXXXXXXXXXXX.ap-northeast-1.docdb.amazonaws.com:27017 --sslCAFile global-bundle.pem --username $user --password $password
WARNING: argument --sslCAFile is deprecated and will be removed. Use --tlsCAFile instead.
Current Mongosh Log ID: 6767bf6b3031d4a87f194de3
Connecting to: mongodb://<credentials>@secretsmanager-integration.cluster-XXXXXXXXXXXX.ap-northeast-1.docdb.amazonaws.com:27017/?directConnection=true&tls=true&tlsCAFile=global-bundle.pem&appName=mongosh+2.3.2
Using MongoDB: 5.0.0
Using Mongosh: 2.3.2
For mongosh info see: https://www.mongodb.com/docs/mongodb-shell/
To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.
------
Warning: Non-Genuine MongoDB Detected
This server or service appears to be an emulation of MongoDB rather than an official MongoDB product.
Some documented MongoDB features may work differently, be entirely missing or incomplete, or have unexpected performance characteristics.
To learn more please visit: https://dochub.mongodb.org/core/non-genuine-mongodb-server-warning.
------
rs0 [direct: primary] test>
まとめ
以上、「Amazon DocumentDB のインスタンスベースクラスターが AWS Secrets Manager との統合をサポートするようになりました」でした。
煩雑になりがちなパスワード管理をうまく DocumentDB でもオフロードできるようになりました。素晴らしいですね。
このブログがどなたかの参考になれば幸いです。
AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!